﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlServerCe;
using System.Data;

namespace GestionaleLib.Controller
{
    public class ctrlDeposito
    {
        #region "Testata"
        #region "Proprietà"
        private Connector Connessione;
        #endregion
        public enum Insert
        {
            Successo,
            Errore
        }
        public enum Edit
        {
            Successo,
            Errore
        }
        public enum Delete
        {
            Successo,
            Errore
        }
        #endregion

        public ctrlDeposito()
        {
            Connessione = Connector.Istance();
        }
        /// <summary>
        /// Inserisce un nuovo deposito
        /// </summary>
        /// <param name="Deposito"></param>
        /// <returns></returns>
        public Insert Nuovo(Deposito Deposito)
        {
            try
            {
                string sql = @"
                    INSERT INTO Deposito 
                    VALUES
                    (@Id,@Nome,@Indirizzo,@Citta,@Provincia,@CAP,@Telefono,@Fax)
                ";
                SqlCeCommand cmd = new SqlCeCommand(sql,Connessione.Connessione);
                cmd.Parameters.AddWithValue("@Id", (Guid)Deposito.Id);
                cmd.Parameters.AddWithValue("@Nome", Deposito.Nome.ToString());
                cmd.Parameters.AddWithValue("@Indirizzo", Deposito.Indirizzo.ToString());
                cmd.Parameters.AddWithValue("@Citta", Deposito.Citta.ToString());
                cmd.Parameters.AddWithValue("@Provincia", Deposito.Provincia.ToString());
                cmd.Parameters.AddWithValue("@CAP", Deposito.CAP.ToString());
                cmd.Parameters.AddWithValue("@Telefono", Deposito.Telefono.ToString());
                cmd.Parameters.AddWithValue("@Fax", Deposito.Fax.ToString());
                cmd.ExecuteNonQuery();
                return Insert.Successo;
            }
            catch
            {
                throw new ExceptionErroreInserimento();
            }
        }
        /// <summary>
        /// Modifica un deposito tramite id
        /// </summary>
        /// <param name="Deposito"></param>
        /// <returns></returns>
        public Edit Modifica(Deposito Deposito)
        {
            try
            {
                string sql = @"
                    UPDATE Deposito SET 
                    Nome=@Nome,Indirizzo=@Indirizzo,Citta=@Citta,Provincia=@Provincia,CAP=@CAP,Telefono=@Telefono,Fax=@Fax 
                    WHERE Id=@Id
                ";
                SqlCeCommand cmd = new SqlCeCommand(sql, Connessione.Connessione);
                cmd.Parameters.AddWithValue("@Id", (Guid)Deposito.Id);
                cmd.Parameters.AddWithValue("@Nome", Deposito.Nome.ToString());
                cmd.Parameters.AddWithValue("@Indirizzo", Deposito.Indirizzo.ToString());
                cmd.Parameters.AddWithValue("@Citta", Deposito.Citta.ToString());
                cmd.Parameters.AddWithValue("@Provincia", Deposito.Provincia.ToString());
                cmd.Parameters.AddWithValue("@CAP", Deposito.CAP.ToString());
                cmd.Parameters.AddWithValue("@Telefono", Deposito.Telefono.ToString());
                cmd.Parameters.AddWithValue("@Fax", Deposito.Fax.ToString());
                cmd.ExecuteNonQuery();
                return Edit.Successo;
            }
            catch
            {
                throw new ExceptionErroreModifica();
            }
        }
        /// <summary>
        /// Cancella un deposito tramite id
        /// </summary>
        /// <param name="Deposito"></param>
        /// <returns></returns>
        public Delete Deposito(Deposito Deposito)
        {
            try
            {
                string sql = @"
                    DELETE FROM Deposito  
                    WHERE Id=@Id
                ";
                SqlCeCommand cmd = new SqlCeCommand(sql, Connessione.Connessione);
                cmd.Parameters.AddWithValue("@Id", (Guid)Deposito.Id);
                cmd.ExecuteNonQuery();
                return Delete.Successo;
            }
            catch
            {
                throw new ExceptionErroreCancellazione();
            }
        }
        /// <summary>
        /// Seleziona tutti i depositi
        /// </summary>
        /// <returns></returns>
        public List<Deposito> Seleziona()
        {
            string sql = @"
                SELECT * FROM Deposito ORDER BY Nome ASC 
            ";
            SqlCeDataAdapter com = new SqlCeDataAdapter(sql, Connessione.Connessione);
            DataTable dt = new DataTable();
            com.Fill(dt);
            List<Deposito> ListaRitorno = new List<Deposito>();
            if (dt.Rows.Count > 0)
            {
                foreach (DataRow item in dt.Rows)
                {
                    Deposito Deposito = new Deposito();
                    Deposito.Id = (Guid)item["Id"];
                    Deposito.Nome = item["Nome"].ToString();
                    Deposito.Indirizzo = item["Indirizzo"].ToString();
                    Deposito.Citta = item["Citta"].ToString();
                    Deposito.Provincia = item["Provincia"].ToString();
                    Deposito.CAP = item["CAP"].ToString();
                    Deposito.Telefono = item["Telefono"].ToString();
                    Deposito.Fax = item["Fax"].ToString();
                    ListaRitorno.Add(Deposito);
                }
                return ListaRitorno;
            }
            return null;
        }
        /// <summary>
        /// Seleziona un deposito tramite id e restituisce un  oggetto deposito completo
        /// </summary>
        /// <param name="Deposito"></param>
        /// <returns></returns>
        public Deposito Seleziona(Deposito Deposito)
        {
            string sql = @"
                SELECT * FROM Deposito 
                WHERE Id=" + Deposito.Id + "'";
            
            SqlCeDataAdapter com = new SqlCeDataAdapter(sql, Connessione.Connessione);
            DataTable dt = new DataTable();
            com.Fill(dt);
            if (dt.Rows.Count > 0)
            {
                Deposito DepositoRitorno = new Deposito();
                DepositoRitorno.Id = (Guid)dt.Rows[0]["Id"];
                DepositoRitorno.Nome = dt.Rows[0]["Nome"].ToString();
                DepositoRitorno.Indirizzo = dt.Rows[0]["Indirizzo"].ToString();
                DepositoRitorno.Citta = dt.Rows[0]["Citta"].ToString();
                DepositoRitorno.Provincia = dt.Rows[0]["Provincia"].ToString();
                DepositoRitorno.CAP = dt.Rows[0]["CAP"].ToString();
                DepositoRitorno.Telefono = dt.Rows[0]["Telefono"].ToString();
                DepositoRitorno.Fax = dt.Rows[0]["Fax"].ToString();
                return DepositoRitorno;
            }
            return null;
        }
    }
}
